package coba.mailing.mail;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import coba.mailing.body.Body1;
import coba.mailing.function.SumAtractivos;
import coba.mailing.jdbc.ConnectionFactory;
import coba.mailing.model.Atractivo;
import coba.mailing.model.AtractivoSum;
import coba.mailing.model.Solicitud;
import coba.mailing.procedure.AddAllCC;
import coba.mailing.properties.MainProperties;
import coba.mailing.query.FindAtractivoByItinerarioIdQuery;
import coba.mailing.query.FindSolicitudWhereFechaMail1IsNull;
import coba.mailing.query.UpdateSolicitudFechaMail1;

public class Mail1 {

	public static void sendAll() throws ClassNotFoundException, IOException, SQLException, EmailException {
		Connection con = ConnectionFactory.getConnection();

		List<Solicitud> listSolicitud = FindSolicitudWhereFechaMail1IsNull.find(con);

		for (Solicitud solicitud : listSolicitud) {
			
			List<Atractivo> listAtractivo = FindAtractivoByItinerarioIdQuery.find(con, solicitud.getItinerarioId());
			List<AtractivoSum> listAtractivoSum = SumAtractivos.sumAtractivos(listAtractivo);
			
			if (listAtractivoSum.size() == 0)
				continue;

			AtractivoSum primerAtractivo = listAtractivoSum.get(0);
			AtractivoSum ultimoAtractivo = listAtractivoSum.get(listAtractivoSum.size() - 1);

			Long horaComienzo = primerAtractivo.getHoraComienzo() / 100;
			Long minutoComienzo = primerAtractivo.getHoraComienzo() % 100;
			Long horaFin = ultimoAtractivo.getHoraFin() / 100;
			Long minutoFin = ultimoAtractivo.getHoraFin() % 100;

			String strHoraMinutoComienzo = horaComienzo + ":" + String.format("%02d", minutoComienzo);
			String strHoraMinutoFin = horaFin + ":" + String.format("%02d", minutoFin);

			if (solicitud.getContactoEmail() != null && !solicitud.getContactoEmail().trim().equals("")) {
				send(solicitud, listAtractivoSum, strHoraMinutoComienzo, strHoraMinutoFin);
				UpdateSolicitudFechaMail1.update(con, solicitud.getSolicitudId(), new Date());
			}

		}

		con.close();
	}

	public static void send(Solicitud solicitud, List<AtractivoSum> listAtractivoSum, String strHoraMinutoComienzo, String strHoraMinutoFin) throws EmailException, IOException {
		MainProperties mainProperties = MainProperties.getInstance();

		EmailAttachment attachment = new EmailAttachment();

		attachment.setURL(ClassLoader.getSystemClassLoader().getResource("Anexo-Transporte.pdf"));
		attachment.setDisposition(EmailAttachment.ATTACHMENT);
		attachment.setDescription("Anexo Transporte");
		attachment.setName("Anexo-Transporte.pdf");
		
		HtmlEmail email = new HtmlEmail();

		email.setCharset("utf-8");
		email.setHostName(mainProperties.getProperty("smtpServer"));
		email.setSmtpPort(Integer.valueOf(mainProperties.getProperty("smtpPort")));
		email.addTo(solicitud.getContactoEmail());

		AddAllCC.addAllCC(email, mainProperties.getProperty("mail1Ccs"));

		email.setFrom(mainProperties.getProperty("fromMail"), mainProperties.getProperty("fromName"));

		email.setSubject("ConociendoBA - Visita " +
				new SimpleDateFormat("dd/MM").format(solicitud.getFechaItinerario()) +
				" Confirmacion");

		String cid = email.embed(ClassLoader.getSystemClassLoader().getResource("coba-mail-footer.jpg"), "Conociendo footer");

		email.setHtmlMsg(Body1.get(cid, solicitud, listAtractivoSum, strHoraMinutoComienzo, strHoraMinutoFin));

		email.attach(attachment);

		email.send();
	}

}
